package org.stvd.service.admin;

import java.util.List;

import org.stvd.entities.admin.Menus;
import org.stvd.entities.admin.TreeNode;
import org.stvd.service.base.BaseService;

/**
 * @Title: MenusService
 * @Description: 系统菜单业务层接口类
 * @author houzx
 * @date 2020年8月8日
 */
public interface MenusService extends BaseService<Menus> {
    /**
     * @Description: 根据GUID获取所有菜单
     * @param guid 平台ID
     * @return
     */
    List<Menus> findAll(String guid);

    /**
     * @Description: 根据用户ID和GUID获取平台用户菜单
     * @param userId 用户ID
     * @param guid 平台ID
     * @return
     */
    List<Menus> findByUid(String userId, String guid);

    /**
     * @Description: 根据资源ID列表及GUID获取菜单列表
     * @param resourceIds 资源ID列表
     * @param guid 平台ID
     * @return
     */
    List<Menus> findByRid(List<String> resourceIds, String guid);
    
    /**
     * @Description: 根据上级ID及GUID获取菜单列表
     * @param guid 平台ID
     * @param upperId 上级ID
     * @return
     */
    List<Menus> findByParentID(String guid, String upperId);

    /**
     * @Description: 根据上级ID及GUID获取所有菜单列表
     * @param guid 平台ID
     * @param upperId 上级ID
     * @return
     */
    List<Menus> getAllMenusByParentID(String guid, String upperId);

    /**
     * @Description: 根据上级ID及用户ID和GUID获取菜单列表
     * @param guid 平台ID
     * @param upperId 上级ID
     * @param userId 用户ID
     * @return
     */
    List<Menus> findByParentID(String guid, String upperId, String userId);

    /**
     * @Description:  根据用户ID及上级ID和GUID获取属性列表
     * @param guid 平台ID
     * @param upperId 上级ID
     * @param userId 用户ID
     * @return
     */
    List<TreeNode> getMenuItems(String guid, String upperId, String userId);

    /**
     * @Description: 根据用户ID及GUID获取属性列表
     * @param guid 平台ID
     * @param userId 用户ID
     * @return
     */
    List<TreeNode> getMenuTreeList(String guid, String userId);

    /**
     * @Description: 根据资源ID列表及GUID获取树形列表
     * @param guid 平台ID
     * @param resourceIds 资源ID列表
     * @return
     */
    List<TreeNode> getMenuTreeListByRole(String guid, List<String> resourceIds);
    
    /**
     * @Description: 更新菜单状态
     * @param guid
     * @param upperId
     */
    void updateMenuState(String guid, String upperId);

    /**
     * @Description: 插入菜单
     * @param menus
     */
    void insertMenu(Menus menus);

    /**
     * @Description: 根据上级ID更新菜单
     * @param menus
     * @param upperId
     */
    void updateMenu(Menus menus, String upperId);

    /**
     * @Description: 删除菜单
     * @param menus
     */
    void deleteMenu(Menus menus);

    /**
     * @Description: 判断是否是子菜单
     * @param guid
     * @param menuId
     * @param childMenuId
     * @return
     */
    boolean isChildMenu(String guid, String menuId, String childMenuId);
}